<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
  <!ENTITY % general-entities SYSTEM "../general.ent">
  %general-entities;
]>

<sect1 id="ch-system-ncurses" role="wrap">
  <?dbhtml filename="ncurses.html"?>

  <sect1info condition="script">
    <productname>ncurses</productname>
    <productnumber>&ncurses-version;</productnumber>
    <address>&ncurses-url;</address>
  </sect1info>

  <title>Ncurses-&ncurses-version;</title>

  <indexterm zone="ch-system-ncurses">
    <primary sortas="a-Ncurses">Ncurses</primary>
  </indexterm>

  <sect2 role="package">
    <title/>

    <para>Пакет содержит библиотеку, предназначенную для управления вводом-выводом на терминал, в числе прочего, библиотека позволяет задавать экранные координаты (в знакоместах) и цвет выводимых символов. Предоставляет программисту уровень абстракции, позволяющий не беспокоиться об аппаратных различиях терминалов и писать переносимый код. Он необходим для ряда пакетов.</para>

    <segmentedlist>
      <segtitle>&buildtime;</segtitle>
      <segtitle>&diskspace;</segtitle>

      <seglistitem>
        <seg>&ncurses-ch6-sbu;</seg>
        <seg>&ncurses-ch6-du;</seg>
      </seglistitem>
    </segmentedlist>

  </sect2>

  <sect2 role="installation">
    <title>Установка пакета Ncurses</title>

    <para>Не следует устанавливать статическую библиотеку, которая не обрабатывается сценарием configure:</para>

<screen><userinput remap="pre">sed -i '/LIBTOOL_INSTALL/d' c++/Makefile.in</userinput></screen>

    <para>Подготовьте пакет Ncurses к компиляции:</para>

<screen><userinput remap="configure">./configure --prefix=/usr           \
            --mandir=/usr/share/man \
            --with-shared           \
            --without-debug         \
            --without-normal        \
            --enable-pc-files       \
            --enable-widec</userinput></screen>

    <variablelist>
      <title>Значения новых параметров конфигурации:</title>

      <varlistentry>
        <term><parameter>--enable-widec</parameter></term>
        <listitem>
          <para>Этот аргумент указывает, что необходимо скомпилировать библиотеки расширенных символов (таких как, <filename
          class="libraryfile">libncursesw.so.&ncurses-version;</filename>)
          вместо обычных (таких как, <filename class="libraryfile">libncurses.so.&ncurses-version;</filename>).
			 Эти библиотеки расширенных символов используются и в многобайтовой и
          традиционной 8-битной локали, в то время как обычные библиотеки работают должным образом
          только в 8-битных локалях. библиотеки расширенных символов и обычные совместимы на уровне исходного кода, но не совместимы в двоичном.</para>
        </listitem>
      </varlistentry>

      <varlistentry>
        <term><parameter>--enable-pc-files</parameter></term>
        <listitem>
          <para>Этот аргумент создает и устанавливает .pc файлы для pkg-config.
          </para>
        </listitem>
      </varlistentry>

      <varlistentry>
        <term><parameter>--without-normal</parameter></term>
        <listitem>
          <para>Этот аргумент отключает сборку и установку большинства статических библиотек.
          </para>
        </listitem>
      </varlistentry>

    </variablelist>

    <para>Скомпилируйте пакет:</para>

<screen><userinput remap="make">make</userinput></screen>

    <para>У пакета присутствуют наборы тестов, однако их запуск возможен только после установки пакета. Наборы тестов располагаются в каталоге <filename class="directory">test/</filename>. Прочитайте файл <filename>README</filename> в этом каталоге для получения дополнительной информации.</para>

    <para>Установите пакет:</para>

<screen><userinput remap="install">make install</userinput></screen>

    <para>Переместите разделяемые библиотеки в каталог <filename class="directory">/lib</filename> где они и должны находиться:</para>

<screen><userinput remap="install">mv -v /usr/lib/libncursesw.so.6* /lib</userinput></screen>

    <para>Поскольку разделяемые библиотеки были перемещены, одна символическая ссылка теперь указывает на несуществующий файл. Создадим эту ссылку заново:</para>

<screen><userinput remap="install">ln -sfv ../../lib/$(readlink /usr/lib/libncursesw.so) /usr/lib/libncursesw.so</userinput></screen>

    <para>Многие приложения по-прежнему ожидают, что компоновщик сможет найти
    библиотеки Ncurses не расширенных символов, а обычных. Обмануть такие программы и связать их с
    библиотеками расширенных символов при помощи создания символических ссылок и сценариев компоновщика:</para>

<screen><userinput remap="install">for lib in ncurses form panel menu ; do
    rm -vf                    /usr/lib/lib${lib}.so
    echo "INPUT(-l${lib}w)" &gt; /usr/lib/lib${lib}.so
    ln -sfv ${lib}w.pc        /usr/lib/pkgconfig/${lib}.pc
done</userinput></screen>

    <para>Наконец, убедимся что старые программы будут искать файлы <filename class="libraryfile">-lcurses</filename> во время
	 сборки и останутся пригодными для последующей сборки:</para>

<screen><userinput remap="install">rm -vf                     /usr/lib/libcursesw.so
echo "INPUT(-lncursesw)" &gt; /usr/lib/libcursesw.so
ln -sfv libncurses.so      /usr/lib/libcurses.so</userinput></screen>

    <para>При желании установите документацию к Ncurses:</para>

<screen><userinput remap="install">mkdir -v       /usr/share/doc/ncurses-&ncurses-version;
cp -v -R doc/* /usr/share/doc/ncurses-&ncurses-version;</userinput></screen>

    <note>

      <para>Приведенные выше инструкции не создают библиотеки расширенных символов, так как ни один пакет, установленный путем компиляции из исходного кода, не будет ссылаться на них во время выполнения. Тем не менее, единственные известные двоичные приложения, которые связываются с библиотеками Ncurses нерасширенных символов, требуют версии 5. Если такие библиотеки необходимы из-за какого-либо приложения только для двоичных файлов или для совместимости с LSB, выполните компиляцию пакета снова с помощью следующих команд:</para>

<screen role="nodump"><userinput>make distclean
./configure --prefix=/usr    \
            --with-shared    \
            --without-normal \
            --without-debug  \
            --without-cxx-binding \
            --with-abi-version=5
make sources libs
cp -av lib/lib*.so.5* /usr/lib</userinput></screen>
    </note>

  </sect2>

  <sect2 id="contents-ncurses" role="content">
    <title>Содержимое пакета Ncurses</title>

    <segmentedlist>
      <segtitle>Установленные программы</segtitle>
      <segtitle>Установленные библиотеки</segtitle>
      <segtitle>Установленные каталоги</segtitle>

      <seglistitem>
        <seg>
           captoinfo (link to tic),
           clear,
           infocmp,
           infotocap (link to tic),
           ncursesw6-config,
           reset (link to tset),
           tabs,
           tic,
           toe,
           tput, and
           tset
        </seg>
        <seg>
           libcursesw.so (symlink and linker script to libncursesw.so),
           libformw.so,
           libmenuw.so,
           libncursesw.so,
           libncurses++w.a,
           libpanelw.so, and their non-wide-character counterparts without "w"
              in the library names.</seg>
        <seg>
           /usr/share/tabset,
           /usr/share/terminfo, and
           /usr/share/doc/ncurses-&ncurses-version;
        </seg>
      </seglistitem>
    </segmentedlist>

    <variablelist>
      <bridgehead renderas="sect3">Краткое описание</bridgehead>
      <?dbfo list-presentation="list"?>
      <?dbhtml list-presentation="table"?>

      <varlistentry id="captoinfo">
        <term><command>captoinfo</command></term>
        <listitem>
          <para>Преобразовывает termcap описание в terminfo</para>
          <indexterm zone="ch-system-ncurses captoinfo">
            <primary sortas="b-captoinfo">captoinfo</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="clear">
        <term><command>clear</command></term>
        <listitem>
          <para>По возможности, очищает экран</para>
          <indexterm zone="ch-system-ncurses clear">
            <primary sortas="b-clear">clear</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="infocmp">
        <term><command>infocmp</command></term>
        <listitem>
          <para>Сравнивает или распечатывает описания terminfo</para>
          <indexterm zone="ch-system-ncurses infocmp">
            <primary sortas="b-infocmp">infocmp</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="infotocap">
        <term><command>infotocap</command></term>
        <listitem>
          <para>Преобразует описание terminfo в описание termcap</para>
          <indexterm zone="ch-system-ncurses infotocap">
            <primary sortas="b-infotocap">infotocap</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="ncursesw6-config">
        <term><command>ncursesw6-config</command></term>
        <listitem>
          <para>Предоставляет сведения о конфигурации для ncurses</para>
          <indexterm zone="ch-system-ncurses ncursesw6-config">
            <primary sortas="b-ncursesw6-config">ncursesw6-config</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="reset">
        <term><command>reset</command></term>
        <listitem>
          <para>Повторная инициализация терминала до значений по умолчанию</para>
          <indexterm zone="ch-system-ncurses reset">
            <primary sortas="b-reset">reset</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="tabs">
        <term><command>tabs</command></term>
        <listitem>
          <para>Очищает и устанавливает табуляторы на терминале</para>
          <indexterm zone="ch-system-ncurses tabs">
            <primary sortas="b-tabs">tabs</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="tic">
        <term><command>tic</command></term>
        <listitem>
          <para>Компилятор описания записи terminfo, преобразующий
          файл terminfo из исходного формата в двоичный формат, необходимый для
          процедур библиотеки ncurses [файл terminfo содержит информацию о
          возможности определенного терминала.]</para>
          <indexterm zone="ch-system-ncurses tic">
            <primary sortas="b-tic">tic</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="toe">
        <term><command>toe</command></term>
        <listitem>
          <para>Выводит список всех доступных типов терминалов с основным именем и
          описанием</para>
          <indexterm zone="ch-system-ncurses toe">
            <primary sortas="b-toe">toe</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="tput">
        <term><command>tput</command></term>
        <listitem>
          <para>Принимает значения зависимыз от терминала доступных в оболочке ; ее можно также использовать для того чтобы переустановить или инициализировать терминал или сообщить его полное наименование</para>
          <indexterm zone="ch-system-ncurses tput">
            <primary sortas="b-tput">tput</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="tset">
        <term><command>tset</command></term>
        <listitem>
          <para>Может быть использована для инициализации терминала</para>
          <indexterm zone="ch-system-ncurses tset">
            <primary sortas="b-tset">tset</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="libcursesw">
        <term><filename class="libraryfile">libcursesw</filename></term>
        <listitem>
          <para>Ссылка на файл <filename>libncursesw</filename></para>
          <indexterm zone="ch-system-ncurses libcursesw">
            <primary sortas="c-libcursesw">libcursesw</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="libncursesw">
        <term><filename class="libraryfile">libncursesw</filename></term>
        <listitem>
          <para>Содержит функции для отображения текста многими сложными способами на экране терминала; хорошим примером использования этих функций является меню, отображаемое во время создания файла конфигурации ядра <command>make menuconfig</command></para>
          <indexterm zone="ch-system-ncurses libncursesw">
            <primary sortas="c-libncursesw">libncursesw</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="libformw">
        <term><filename class="libraryfile">libformw</filename></term>
        <listitem>
          <para>Содержит функции для реализации форм</para>
          <indexterm zone="ch-system-ncurses libformw">
            <primary sortas="c-libformw">libformw</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="libmenuw">
        <term><filename class="libraryfile">libmenuw</filename></term>
        <listitem>
          <para>Содержитфункции для реализации меню</para>
          <indexterm zone="ch-system-ncurses libmenuw">
            <primary sortas="c-libmenuw">libmenuw</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="libpanelw">
        <term><filename class="libraryfile">libpanelw</filename></term>
        <listitem>
          <para>Содержит функции для реализации панелей</para>
          <indexterm zone="ch-system-ncurses libpanelw">
            <primary sortas="c-libpanelw">libpanelw</primary>
          </indexterm>
        </listitem>
      </varlistentry>

    </variablelist>

  </sect2>

</sect1>
